import java.util.Arrays;
import java.util.Stack;

public class Solution {

    public int[] nextGreaterElements(int[] nums) {
        int n=nums.length;
        int[] result=new int[n];
        Arrays.fill(result,-1);//把结果数组全部填充-1
        Stack<Integer> stack=new Stack<>();
        for(int i=0;i<n*2;i++){
            //如果当前元素大于栈中元素
            while(!stack.isEmpty()&&nums[i%n]>nums[stack.peek()]){
                //但前元素是栈中元素的下一个最大元素
                result[stack.pop()]=nums[i%n];//左边是当前元素
                //将栈中元素直接找到结果数组对应的下标
            }
            stack.push(i%n);
        }
        return  result;
    }
}